<?php
/**
 * Description of Table
 *
 * @author Antônio Braga
 */

Class Fencer_Db_Table extends Zend_Db_Table {
	
	protected $_schema;
	protected $_name;
	protected $_primary;
	protected $_order;
	protected $_status;
	protected $_data;
	
	
	public function gravar($dados)
	{
		$this->_popular($dados);
		
		if($this->_getPkValue()){
			$this->update($this->_data, $this->_primary[1] .' = ' . $this->_getPkValue());
			
			$mensagem = "Alteração realizada com sucesso!";
			$session = new Zend_Session_Namespace('siscave');
			$session->mensagem->sucesso = $mensagem;
			
			return $this->_getPkValue();
		} else {
			if($this->_status){
				$this->_data[$this->_status] = 'A';
			}
			$this->insert($this->_data);
			
			$mensagem = "Cadastro realizado com sucesso!";
			$session = new Zend_Session_Namespace('siscave');
			$session->mensagem->sucesso = $mensagem;
			
			return $this->_db->lastInsertId($this->getTbName(),$this->getPkName());
		}
	}
	
	public function excluir($id)
	{
		$mensagem = "Exclusão realizada com sucesso!";
		$session = new Zend_Session_Namespace('siscave');
		$session->mensagem->sucesso = $mensagem;
		return $this->update(array($this->_status => 'I'), $this->_primary .' = ' . $id);
	}
	
	protected function _popular($dados){
		$this->_defineAtribs();
		foreach ($this->_data as $k => $value){
			if(array_key_exists($k, $dados)){
				$this->_data[$k] = $dados[$k];
			}else{
				$this->_data[$k] = null;
			}
		}
	}
	
	protected function _getPkValue(){
		return $this->_data[$this->_primary[1]];
	}
	
	public function getArraySelect($where = null, $order = null)
	{
		$this->_defineAtribs();
		$order  = is_null($order) ? $this->_order : $order;
		$rowSet = $this->fetchAll($where, $order);
		$aDados = array(''=>'');
		foreach($rowSet as $row){
			$aDados[$row->{$this->_primary[1]}] = $row->{$this->_order};
		}
		unset($aDados['']);
		return $aDados;
	}
	
	public function getRowById($id)
	{
		$this->_defineAtribs();
		$row = $this->find($id)->current();
		$aDados = array();
	
		foreach($this->_data as $k=>$value){
			$aDados[$k] = $row->{$k};
		}
	
		return $aDados;
	}
	
	public function getOrder()
	{
		return $this->_order;
	}
	
	public function getTbName()
	{
		return $this->_schema.'.'.$this->_name;
	}
	
	public function getPkName()
	{
		return $this->_primary[1];
	}
	
	protected function _defineAtribs(){
		$data = $this->info();
		if( is_null($this->_primary) ){
			$this->_primary = $data['primary'];
		}
	
		if( is_null($this->_data) ){
			$this->_data = array();
			foreach ($data['cols'] as $value) {
				$this->_data[$value] = null;
			}
		}
	}
}